evolog: change evolution viewer + migrate annotate to jj_lib#25
evolog: change evolution viewer + migrate annotate to jj_lib#25hewigovens merged 1 commit intomainfrom
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces a change evolution viewer (jj evolog) and GitHub Pull Request integration, while refactoring file annotation and history to use jj_lib in-process for improved performance. The UI has been updated with a new DetailPaneMode enum to manage mutually exclusive detail views and a dedicated evolution history interface. Feedback focuses on optimizing hex encoding by using byte slices to avoid unnecessary allocations and ensuring that author emails are not aggressively truncated in the data layer.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a7dbb55911
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- Right-click any change → Show evolution… opens a list of every prior rewrite (snapshot/describe/rebase/squash/split/new) with operation labels and timestamps. - Click an entry to interdiff that version against the current head; click a file for the side-by-side diff. Right-click a row to copy the commit-id or a ready-to-paste 'jj restore --from X --into @' command. - Hidden on immutable changes since their evolog is a single entry. - DetailPaneMode enum collapses the previous five mutually-exclusive @State vars (annotateLines/path, fileHistory/path, isDiffEditMode) into one type-safe state. - Evolog and annotate now run in-process via jj_lib::evolution and jj_lib::annotate (no jj CLI shell-out, no template parsing). - file_history switches to a typed revset built from RevsetExpression::filter + FilesetExpression::file_path; new log_typed shares iteration logic with log via collect_changes helper. - Command palette accepts 'jj ' as an alias for '!' so 'jj st' works. - Annotate / FileHistory / Evolog headers all use a system Done button with esc keyboard shortcut for a consistent close affordance; evolog list switches from .sidebar to .plain to fix light-mode background.
a7dbb55 to
4f665d2
Compare
Summary
evologandfile annotatenow run in-process viajj_lib::evolution::walk_predecessorsandjj_lib::annotate::FileAnnotator— no morejjCLI shell-out, no template parsing.file_historyswitches to a type-safe revset (RevsetExpression::filter+FilesetExpression::file_path) instead of formatted strings; newlog_typedshares iteration logic withlogvia acollect_changeshelper.DetailPaneModeenum collapses five mutually-exclusive@Statevars (annotate, file history, diff edit) into one type-safe state.jjas an alias for!(e.g.jj st)..plaininstead of.sidebarto fix the light-mode background.Test plan
main) → no Show evolution… entry.jj st,jj log,! stall work and produce inline output.